home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-01-13 | 2.8 KB | 142 lines | [TEXT/CWIE] |
- /*
- File: LinkedListIterator.cp
-
- Contains: stuff
-
- */
-
- #include "LinkedListIterator.h"
- #include "LinkedList.h"
- #include "ListLink.h"
-
-
- LinkedListIterator::LinkedListIterator(LinkedList& list, ListLink* start)
- : fList(list),
- fCurrentLink(start),
- fNextIterator(list.fIteratorList)
- {
- list.fIteratorList = this;
- }
-
- //--------------------------------------------------------------------------------
- LinkedListIterator::~LinkedListIterator()
- {
- LinkedListIterator* iter = fList.fIteratorList;
-
- if (iter == this) // special case if we're first (very likely)
- {
- fList.fIteratorList = fNextIterator;
- }
- else while (iter != nil) // look through the chain
- {
- LinkedListIterator* prev = iter;
- iter = iter->fNextIterator;
-
- if (iter == this)
- {
- prev->fNextIterator = iter->fNextIterator;
- break;
- }
- }
- }
-
-
- //--------------------------------------------------------------------------------
- Boolean LinkedListIterator::MoreBefore()
- {
- return fCurrentLink && fCurrentLink->GetPrevLink();
- }
-
-
- //--------------------------------------------------------------------------------
- Boolean LinkedListIterator::MoreAfter()
- {
- return fCurrentLink && fCurrentLink->GetNextLink();
- }
-
-
- //--------------------------------------------------------------------------------
- ListLink* LinkedListIterator::FirstLink()
- {
- ListLink* link = fList.GetFirstLink();
-
- fCurrentLink = link;
-
- return link;
- }
-
-
- //--------------------------------------------------------------------------------
- ListLink* LinkedListIterator::LastLink()
- {
- ListLink* link = fList.GetLastLink();
-
- fCurrentLink = link;
-
- return link;
- }
-
-
- //--------------------------------------------------------------------------------
- ListLink* LinkedListIterator::NextLink()
- {
- ListLink* link = fCurrentLink;
-
- if (link)
- link = link->GetNextLink();
-
- fCurrentLink = link;
-
- return link;
- }
-
-
- //--------------------------------------------------------------------------------
- ListLink* LinkedListIterator::PrevLink()
- {
- ListLink* link = fCurrentLink;
-
- if (link)
- link = link->GetPrevLink();
-
- fCurrentLink = link;
-
- return link;
- }
-
-
- //--------------------------------------------------------------------------------
- void LinkedListIterator::LinkInserted(ListLink& link)
- {
- if (fNextIterator)
- fNextIterator->LinkInserted(link);
- }
-
-
- //--------------------------------------------------------------------------------
- void LinkedListIterator::RemovingLink(ListLink& link)
- {
- // If the current link is about to be deleted, make sure we don't
- // have a dangling pointer lying around
-
- if (&link == fCurrentLink)
- {
- fCurrentLink = nil;
- }
-
- if (fNextIterator)
- fNextIterator->RemovingLink(link);
- }
-
-
- //--------------------------------------------------------------------------------
- void LinkedListIterator::RemovingAllLinks()
- {
- fCurrentLink = nil;
-
- if (fNextIterator)
- fNextIterator->RemovingAllLinks();
- }
-
-
-